1 Wstęp

Celem projektu było określenie jakie czynniki najlepiej pozwalają przewidzieć energię wytwarzaną przez panele fotowoltaiczne na podstawie danych pochodzących z trzech sąsiadujących elektrowni słonecznych we Włoszech. Analizie podlegał zbiór danych zawierający pomiary z czujników umieszczonych przy panelach fotowoltaicznych. Na początku należało przyjrzeć się danym, nazwom ich kolumn i ich rozkładom. Następnie należało zastanowić się czy nie występują warotści puste a następnie takie wartości wyczyścić. Następnie możnabyło przystąpić do budowy regresora który mógłby posłużyć do przewidywania produkcji energii w zależności od innych czynnikóW. Przy wytypowaniu najważniejszych atrybutów które wpływających na wielkość wytwarzanej energii ważny okazał się wykres korelacji atrybutóW. Naturalnymi kandydatami były atrybuty które miały dodatnią bądź ujemną korelację z atrybutem kwh. Następnie został stworzony regresor, i na podstawie wag atrybutów został wyznaczony najważniejszy atrybut - nasłonecznienie.

2 Wartości puste:

Zbiór nie zbiór nie zawierał wartości NA, ale zawierał dwie sytuacje które mogą wskazywać na błędy bądź awarie czujników.

Są sytuacje, gdy wartosć kwh jest równa zero. Taka sytuacja nie powinna zajść, gdy wartość napromieniowania słonecznego jest różna od zero. W takiej sytuacji pdstawiamy zamiast wartości zero wartość średnią. Możnaby także takie pomiary w ogóle wyrzucać ze zbrioru, ale utrata informacji byłaby zbyt duża.

I vice versa, gdy zerowe irradiamento, nie powinno być kwh. W takiej sytuacji, gdy jest dodatnie kwh i zerowe irradiamento, podstawiamy podd irradiamento wartość średnią.

3 Podsumowanie

Dane kolumny, które udało się rozszyfrować, oznaczają:

## 'data.frame':    235790 obs. of  50 variables:
##  $ idsito              : num  0.425 0.25 0.35 0.325 0 0.375 0.4 0.125 0.225 0.075 ...
##  $ idmodel             : num  0.083 0.208 0.375 0.292 0 0.417 0.458 0.167 0.208 0.083 ...
##  $ idbrand             : num  0.083 0.083 0 0.167 0.333 0 0 0.167 0.083 0.083 ...
##  $ lat                 : num  0.437 0.437 0.439 0.44 0.436 0.552 0.553 0.415 0.437 0.437 ...
##  $ lon                 : num  0.631 0.62 0.626 0.612 0.626 0.154 0.16 0.691 0.62 0.624 ...
##  $ ageinmonths         : num  1 0.063 0 0.25 0.719 0.125 0.125 0 0.063 1 ...
##  $ anno                : int  2012 2012 2012 2012 2012 2012 2012 2012 2012 2012 ...
##  $ day                 : num  0.003 0.003 0.003 0.003 0.003 0.003 0.003 0.003 0.003 0.003 ...
##  $ ora                 : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ data                : Factor w/ 13870 levels "1/1/2013 10:00",..: 410 410 410 410 410 410 410 410 410 410 ...
##  $ temperatura_ambiente: num  0.212 0.212 0.212 0.212 0.212 0.212 0.212 0.212 0.212 0.212 ...
##  $ irradiamento        : num  0.109 0.109 0.109 0.109 0.109 ...
##  $ pressure            : num  0 0 0 0 0 0 0 0.762 0 0 ...
##  $ windspeed           : num  0.054 0.062 0.054 0.06 0.054 0.054 0.054 0.071 0.061 0.054 ...
##  $ humidity            : num  0.81 0.8 0.76 0.76 0.82 0.83 0.83 0.81 0.8 0.8 ...
##  $ icon                : num  0.083 0.083 0.083 0.083 0.083 0.75 0.75 0.083 0.083 0.083 ...
##  $ dewpoint            : num  0.436 0.444 0.432 0.442 0.436 0.45 0.45 0.502 0.444 0.435 ...
##  $ windbearing         : num  0.557 0.585 0.557 0.578 0.557 0.493 0.493 0.559 0.582 0.557 ...
##  $ cloudcover          : num  0 0 0 0 0 0.57 0.56 0 0 0 ...
##  $ tempi               : num  0.113 0.117 0.115 0.115 0.119 0.104 0.104 0.072 0.119 0.119 ...
##  $ irri                : num  0.219 0.22 0.22 0.22 0.22 0.22 0.22 0.216 0.22 0.216 ...
##  $ pressurei           : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ windspeedi          : num  0.04 0.038 0.039 0.04 0.038 0.038 0.038 0.037 0.04 0.038 ...
##  $ humidityi           : num  0.085 0.046 0.044 0.044 0.046 0.113 0.113 0.044 0.091 0.046 ...
##  $ dewpointi           : num  0.114 0.188 0.201 0.17 0.114 0.122 0.122 0.114 0.181 0.202 ...
##  $ windbearingi        : num  0.422 0.374 0.336 0.351 0.422 0.333 0.333 0.336 0.339 0.418 ...
##  $ cloudcoveri         : num  0.2 0.329 0.201 0.198 0.32 0.202 0.202 0.196 0.28 0.2 ...
##  $ dist                : num  0.984 0.984 0.984 0.984 0.984 ...
##  $ altitude            : num  0.118 0.117 0.118 0.118 0.117 0.139 0.139 0.115 0.118 0.117 ...
##  $ azimuth             : num  0.148 0.147 0.147 0.145 0.147 0.165 0.164 0.157 0.147 0.147 ...
##  $ altitudei           : num  0.52 0.508 0.52 0.507 0.504 0.534 0.534 0.095 0.509 0.504 ...
##  $ azimuthi            : num  0.813 0.78 0.825 0.782 0.78 0.769 0.769 0.207 0.78 0.789 ...
##  $ pcnm1               : num  0.376 0.38 0.378 0.384 0.378 0.838 0 0.424 0.38 0.378 ...
##  $ pcnm2               : num  0.095 0.526 0.348 0.972 0.25 0.377 0.4 0.394 0.523 0.352 ...
##  $ pcnm3               : num  1 0.747 0 0.485 0.605 0.605 0.605 0.605 0.805 0.551 ...
##  $ pcnm4               : num  0.438 0.534 0.314 0.36 0.531 0.531 0.531 0.531 0 0.773 ...
##  $ pcnm5               : num  1 0.403 0.583 0.462 0.427 0.427 0.427 0.427 0.429 0.331 ...
##  $ pcnm6               : num  0 0.765 0.465 0.358 0.493 0.493 0.493 0.493 0.484 0.305 ...
##  $ pcnm7               : num  0.011 0.061 0.04 0.112 1 0.114 0.114 0.114 0.06 0.041 ...
##  $ pcnm8               : num  0.127 0.516 0 0.154 0.412 0.412 0.412 0.412 1 0.7 ...
##  $ pcnm9               : num  0.599 0.867 0.072 1 0.532 0.532 0.532 0.532 0 0.543 ...
##  $ pcnm10              : num  0.553 0 0.432 1 0.619 0.619 0.619 0.619 0.717 0.874 ...
##  $ pcnm11              : num  0.39 0.086 0.257 0.252 0.327 0.327 0.327 0.327 0.313 0 ...
##  $ pcnm12              : num  0.828 0.99 0.884 0.787 0.748 0.748 0.748 0.748 0.76 0.796 ...
##  $ pcnm13              : num  0.562 0.841 0.597 1 0.614 0.614 0.614 0.614 0.89 0.291 ...
##  $ pcnm14              : num  0.485 0.606 0.539 0.432 0.473 0.473 0.473 0.473 0.424 1 ...
##  $ pcnm15              : num  0.612 0.616 0.614 0.62 0.614 1 0.15 0.57 0.616 0.614 ...
##  $ irr_pvgis_mod       : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ irri_pvgis_mod      : num  0.189 0.2 0.158 0.204 0.199 0.198 0.198 0.158 0.199 0.201 ...
##  $ kwh                 : num  0.169 0.169 0.169 0.169 0.169 ...
Table continues below
idsito idmodel idbrand lat
Min. :0.0000 Min. :0.0000 Min. :0.0000 Min. :0.4150
1st Qu.:0.1000 1st Qu.:0.1670 1st Qu.:0.0830 1st Qu.:0.4370
Median :0.2250 Median :0.2080 Median :0.1670 Median :0.4370
Mean :0.2147 Mean :0.2426 Mean :0.1519 Mean :0.4495
3rd Qu.:0.3250 3rd Qu.:0.2920 3rd Qu.:0.1670 3rd Qu.:0.4390
Max. :0.4250 Max. :0.7500 Max. :0.4170 Max. :0.5530
NA NA NA NA
Table continues below
lon ageinmonths anno day
Min. :0.1540 Min. :0.0000 Min. :2012 Min. :0.0000
1st Qu.:0.6200 1st Qu.:0.0000 1st Qu.:2012 1st Qu.:0.2520
Median :0.6240 Median :0.1250 Median :2012 Median :0.4770
Mean :0.5711 Mean :0.3145 Mean :2012 Mean :0.4812
3rd Qu.:0.6300 3rd Qu.:0.7190 3rd Qu.:2013 3rd Qu.:0.7100
Max. :0.6910 Max. :1.0000 Max. :2013 Max. :1.0000
NA NA NA NA
Table continues below
ora data temperatura_ambiente irradiamento
Min. :0.000 1/1/2013 10:00: 17 Min. :0.0450 Min. :0.0010
1st Qu.:0.222 1/1/2013 11:00: 17 1st Qu.:0.2120 1st Qu.:0.0840
Median :0.500 1/1/2013 12:00: 17 Median :0.3480 Median :0.1091
Mean :0.500 1/1/2013 13:00: 17 Mean :0.3734 Mean :0.1454
3rd Qu.:0.778 1/1/2013 14:00: 17 3rd Qu.:0.5300 3rd Qu.:0.2040
Max. :1.000 1/1/2013 15:00: 17 Max. :0.8180 Max. :0.7100
NA (Other) :235688 NA NA
Table continues below
pressure windspeed humidity icon
Min. :0.0000 Min. :0.00000 Min. :0.1600 Min. :0.0000
1st Qu.:0.7480 1st Qu.:0.04200 1st Qu.:0.5400 1st Qu.:0.0830
Median :0.7530 Median :0.06600 Median :0.7000 Median :0.6670
Mean :0.6504 Mean :0.07622 Mean :0.6844 Mean :0.4623
3rd Qu.:0.7550 3rd Qu.:0.10200 3rd Qu.:0.8400 3rd Qu.:0.6670
Max. :0.7690 Max. :0.69600 Max. :1.0000 Max. :0.7500
NA NA NA NA
Table continues below
dewpoint windbearing cloudcover tempi
Min. :0.1390 Min. :0.0000 Min. :0.000 Min. :0.0090
1st Qu.:0.5350 1st Qu.:0.3000 1st Qu.:0.230 1st Qu.:0.0730
Median :0.6190 Median :0.4780 Median :0.310 Median :0.1110
Mean :0.6055 Mean :0.4512 Mean :0.359 Mean :0.1225
3rd Qu.:0.6830 3rd Qu.:0.6600 3rd Qu.:0.510 3rd Qu.:0.1260
Max. :0.8650 Max. :0.7690 Max. :1.000 Max. :0.9830
NA NA NA NA
Table continues below
irri pressurei windspeedi humidityi
Min. :0.108 Min. :0.000000 Min. :0.00000 Min. :0.03400
1st Qu.:0.216 1st Qu.:0.000000 1st Qu.:0.03700 1st Qu.:0.04400
Median :0.220 Median :0.000000 Median :0.03800 Median :0.04400
Mean :0.222 Mean :0.000237 Mean :0.03852 Mean :0.06384
3rd Qu.:0.222 3rd Qu.:0.000000 3rd Qu.:0.03900 3rd Qu.:0.06200
Max. :1.000 Max. :1.000000 Max. :1.00000 Max. :0.57900
NA NA NA NA
Table continues below
dewpointi windbearingi cloudcoveri dist
Min. :0.0630 Min. :0.0000 Min. :0.0000 Min. :0.0000
1st Qu.:0.1140 1st Qu.:0.3360 1st Qu.:0.1960 1st Qu.:0.1913
Median :0.1140 Median :0.3360 Median :0.1960 Median :0.4590
Mean :0.1194 Mean :0.3455 Mean :0.2062 Mean :0.4686
3rd Qu.:0.1180 3rd Qu.:0.3390 3rd Qu.:0.1980 3rd Qu.:0.7268
Max. :0.4150 Max. :1.0000 Max. :1.0000 Max. :1.0000
NA NA NA NA
Table continues below
altitude azimuth altitudei azimuthi
Min. :0.1110 Min. :0.1280 Min. :0.0000 Min. :0.0000
1st Qu.:0.4190 1st Qu.:0.2950 1st Qu.:0.0960 1st Qu.:0.2090
Median :0.5640 Median :0.4250 Median :0.1360 Median :0.2880
Mean :0.5464 Mean :0.4546 Mean :0.2055 Mean :0.3653
3rd Qu.:0.6810 3rd Qu.:0.6350 3rd Qu.:0.2660 3rd Qu.:0.4820
Max. :0.8840 Max. :0.8180 Max. :0.9820 Max. :1.0000
NA NA NA NA
Table continues below
pcnm1 pcnm2 pcnm3 pcnm4
Min. :0.0000 Min. :0.0000 Min. :0.0000 Min. :0.0000
1st Qu.:0.3770 1st Qu.:0.2500 1st Qu.:0.5510 1st Qu.:0.3630
Median :0.3780 Median :0.3770 Median :0.6050 Median :0.5310
Mean :0.4224 Mean :0.3538 Mean :0.6045 Mean :0.5189
3rd Qu.:0.3800 3rd Qu.:0.4220 3rd Qu.:0.7300 3rd Qu.:0.6340
Max. :1.0000 Max. :0.9720 Max. :1.0000 Max. :1.0000
NA NA NA NA
Table continues below
pcnm5 pcnm6 pcnm7 pcnm8
Min. :0.0000 Min. :0.0000 Min. :0.0000 Min. :0.0000
1st Qu.:0.3310 1st Qu.:0.3390 1st Qu.:0.0310 1st Qu.:0.2040
Median :0.4270 Median :0.4930 Median :0.0520 Median :0.4120
Mean :0.4165 Mean :0.4941 Mean :0.1142 Mean :0.4034
3rd Qu.:0.4620 3rd Qu.:0.4930 3rd Qu.:0.1140 3rd Qu.:0.5110
Max. :1.0000 Max. :1.0000 Max. :1.0000 Max. :1.0000
NA NA NA NA
Table continues below
pcnm9 pcnm10 pcnm11 pcnm12
Min. :0.0000 Min. :0.0000 Min. :0.0000 Min. :0.0000
1st Qu.:0.5270 1st Qu.:0.5530 1st Qu.:0.2570 1st Qu.:0.7480
Median :0.5320 Median :0.6190 Median :0.3270 Median :0.7600
Mean :0.5371 Mean :0.6276 Mean :0.3236 Mean :0.7568
3rd Qu.:0.6000 3rd Qu.:0.7170 3rd Qu.:0.3270 3rd Qu.:0.8840
Max. :1.0000 Max. :1.0000 Max. :1.0000 Max. :1.0000
NA NA NA NA
Table continues below
pcnm13 pcnm14 pcnm15 irr_pvgis_mod
Min. :0.1370 Min. :0.0000 Min. :0.0000 Min. :0.0000
1st Qu.:0.6140 1st Qu.:0.4320 1st Qu.:0.6120 1st Qu.:0.0000
Median :0.6140 Median :0.4730 Median :0.6140 Median :0.0560
Mean :0.6501 Mean :0.4893 Mean :0.5709 Mean :0.1767
3rd Qu.:0.7380 3rd Qu.:0.5300 3rd Qu.:0.6150 3rd Qu.:0.3250
Max. :1.0000 Max. :1.0000 Max. :1.0000 Max. :1.0000
NA NA NA NA
irri_pvgis_mod kwh
Min. :-0.0250 Min. :0.0010
1st Qu.: 0.1580 1st Qu.:0.1070
Median : 0.1940 Median :0.1688
Mean : 0.1967 Mean :0.2250
3rd Qu.: 0.2130 3rd Qu.:0.3320
Max. : 1.0060 Max. :1.0000
NA NA

4 Analiza wartości atrybutów

5 Korelacja pomiędzy atrybutami

Wykres przedstawia korelację pomiędzy atrybutami.

6 Wytwarzanie energii w czasie i przestrzeni

Wykres przedstawia sumaryczną ilość wytwarzanej energii dla danej długości i szerokości geograficznej w skali roku.

energyTimeSpace <- dataSet %>% group_by(lat,lon,anno) %>% summarise(kwh_sum = sum(kwh))

p <- energyTimeSpace %>%
  plot_ly(
    x = ~lat,
    y = ~lon,
    size = ~kwh_sum,
    color = ~kwh_sum,
    frame = ~anno,
    type = 'scatter',
    mode = 'markers',
    showlegend = T
  )
p

7 Regresor

Do regresora wybrane zostały kolumny które wykazały korelację (dodatnią bądź negatywną) z kolumną kwh. Do trenowania i testowania regresora został wybrany stały podział zbioru. Dane zostały podzielone w proporcjachL 0.6 = zbiór treningowy, 0.4 = zbiór treningowy. Wybrana została metoda regresji liniowej.

modelDataSet <- dataSet %>% select(idsito,lat,lon,ora,azimuthi,humidity,temperatura_ambiente,tempi,cloudcover,irri_pvgis_mod,irr_pvgis_mod,irradiamento,kwh)
split<-createDataPartition(y = modelDataSet$kwh, p = 0.6, list = FALSE)

dev<-modelDataSet[split,]

val<-modelDataSet[-split,]

lmFit<-train(kwh~., data = dev, trControl=trainControl(method="cv", number=10), method = "lm")

summary(lmFit)
## 
## Call:
## lm(formula = .outcome ~ ., data = dat)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.63234 -0.04823  0.00092  0.03464  0.99384 
## 
## Coefficients:
##                       Estimate Std. Error t value Pr(>|t|)    
## (Intercept)          -0.984160   0.068487 -14.370  < 2e-16 ***
## idsito                0.066599   0.002306  28.875  < 2e-16 ***
## lat                   1.873522   0.116343  16.103  < 2e-16 ***
## lon                   0.438521   0.028886  15.181  < 2e-16 ***
## ora                   0.003894   0.001283   3.034  0.00241 ** 
## azimuthi             -0.015815   0.001856  -8.521  < 2e-16 ***
## humidity             -0.050913   0.002121 -24.007  < 2e-16 ***
## temperatura_ambiente -0.001679   0.002666  -0.630  0.52880    
## tempi                -0.238972   0.005413 -44.148  < 2e-16 ***
## cloudcover           -0.048048   0.001111 -43.249  < 2e-16 ***
## irri_pvgis_mod        0.090104   0.005840  15.429  < 2e-16 ***
## irr_pvgis_mod         0.198341   0.002485  79.821  < 2e-16 ***
## irradiamento          0.927730   0.004096 226.505  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.09937 on 141462 degrees of freedom
## Multiple R-squared:  0.6889, Adjusted R-squared:  0.6888 
## F-statistic: 2.61e+04 on 12 and 141462 DF,  p-value: < 2.2e-16
predictedVal<-predict(lmFit,val)

modelvalues<-data.frame(obs = val$kwh, pred=predictedVal)

defaultSummary(modelvalues)
##       RMSE   Rsquared        MAE 
## 0.09914969 0.68966626 0.06568357

8 Analiza ważności atrybutów

Z analizy ważności atrybutów wynika że nazważniejszym aktrybutem jest atrybut irradiamento - nasłonecznienie.

varImp(lmFit)
## lm variable importance
## 
##                      Overall
## irradiamento         100.000
## irr_pvgis_mod         35.060
## tempi                 19.267
## cloudcover            18.868
## idsito                12.505
## humidity              10.350
## lat                    6.851
## irri_pvgis_mod         6.552
## lon                    6.442
## azimuthi               3.493
## ora                    1.065
## temperatura_ambiente   0.000
plot(varImp(lmFit))